# encoding: utf-8
"""
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    created by lane.chang on '10/10/2024'
    comment: 根据相关知识进行QA问答，生成回复
"""
import asyncio

from project.core.function import match_texts
from project.model.basic import User, Room
from project.service.agents.agent import Agent

class RadarService:

    @staticmethod
    async def enquire(dev_id, room_info: list[Room], user_message):
        """ 问询
        :dev_id: 设备编号
        :room_info: 房间信息
        :user_message: 用户话术
        :return:
        """
        room_info = [v.agent_dict for v in room_info]

        prompt = """
        ###Instruction
        你是一名房间管理员，用户可以通过你查询的楼栋楼层以及房间区域名称并询问当前房间区域是否空闲或者人员数量等。
        
        你将完成一个任务:
            具体SOP为：
                需要办公室开会的话，需要确保该办公室空闲。
                注意，你的口吻要符合你的身份，同时要注意口语化表达，请像林志玲那样说话，注意言简意赅，不要表达你的主观感受，也注意不要每次都重复开头，多变一点。请尽量简短回复，控制内容在30个字以内。
        
        ### 房间的信息列表: {room_info}
        
        ### 你们的对话历史：{user_memories}
        
        ### 用户对你说的话: {user_message}
        
        ### 输出格式要求:
        <reason>这是你的推理过程</reason><response>这是你回复用户的话</response>
        
        """
        agent = Agent(User(dev_id=dev_id), user_message=user_message, business_name='房间查询', memories_key='room_enquire')
        res = await agent.async_interact(prompt=prompt, room_info=room_info)
        result = match_texts(res, 'reason', 'response')

        # 添加记忆
        if result['response']:
            agent.add_user_memories(agent.format(user_message))
            agent.add_user_memories(agent.format(result['response'], _type='out'))

        return result


if __name__ == "__main__":
    """
    """
    room_info = [
        {
        "房间类型": "会议室",
        "楼栋名称": "南山智园B1栋",
        "楼层名称": "13楼",
        "房间名称": "Beta会议室",
        "区域信息": "南山智园B1栋13楼Beta会议室",
        "人数": 1
        },
        {
            "房间类型": "会议室",
            "楼栋名称": "南山智园B1栋",
            "楼层名称": "14楼",
            "房间名称": "Beta会议室",
            "区域信息": "南山智园B1栋13楼Beta会议室",
            "人数": 0
        }
    ]
    user_message = "目前都有哪些会议室可用？"


    asyncio.run(RadarService.enquire(room_info, user_message))

